<template>
  <div  id="app" >
    <router-view />
  </div>
</template>

<script>
  import tim from "@/tim";
  import TIM from 'tim-js-sdk'
  import {removeToken,removeUserSign} from "@/utils/auth";
  import { resetRouter } from '@/router'
  import {mapGetters} from 'vuex'

export default {
  name: 'App',
  computed:{
    ...mapGetters([
      'name','avatar','signature'
    ])
  },
  mounted() {
    this.initListener()
  },
  methods:{
    initListener() {
      // 登录成功后 会触发SDK_READY 事件，该事件触发后，可正常使用SDK接口
      tim.on(TIM.EVENT.SDK_READY, this.onReadyStateUpdate)
      // 会话列表更新
      tim.on(TIM.EVENT.CONVERSATION_LIST_UPDATED,this.onUpdateConversationList)
      // 监听来自其他用户发送的消息
      tim.on(TIM.EVENT.MESSAGE_RECEIVED,this.onReceiveMessage)
      // 监听当前账号被踢事件
      tim.on(TIM.EVENT.KICKED_OUT,this.onKickedOut);
      // 监听会话中被撤回的消息
      tim.on(TIM.EVENT.MESSAGE_RECEIVED,this.onMessageRevoked)
    },
    // timSDK read --- 回调函数
    onReadyStateUpdate({name}){
      console.log("timSDK 准备好了 --- 回调方法")
      const  isSDKReady = name === TIM.EVENT.SDK_READY
      this.$store.commit('chat/set_isSDKReady',isSDKReady)
      if(isSDKReady){
        // 修改用户信息
        tim.updateMyProfile({
          nick:this.name,
          avatar:this.avatar,
          gender:TIM.TYPES.GENDER_MALE,
          selfSignature:this.signature,
          allowType: TIM.TYPES.ALLOW_TYPE_ALLOW_ANY
        }).then((imResponse)=>{
          console.log(imResponse.data)
        })
      }
      this.$store.dispatch('chat/getConversationListTIM').then(()=>{
        console.log("timSDK read：获取会话列表")
      })
    },
    // 更新会话列表 --- 回调方法
    onUpdateConversationList(event){
      console.log("更新会话列表")
      console.log(event.data)
      this.$store.commit('chat/updateConversationList',event.data)
    },
    // 接收新消息 - 回调方法 别人给我发消息在这里接收
    onReceiveMessage(event){
      console.log("收到对方发送的消息")
      console.log(event.data)
      this.$store.commit('chat/pushCurrentMessageList', event.data)
      this.$store.commit('chat/showMessage',{
        message:'您收到一条消息！',
        type:'success'
      })
      this.$store.dispatch('chat/setCurrentConversationMessageRead')
    },
    // 监听被踢事件
    onKickedOut(event){
      console.log(event.data.type);
      this.$confirm('当前账号已在其它设备登录！','提示',{
        confirmButtonText:'重新登录',
        cancelButtonText:'退出登录',
        type:'warning',
        showClose:false,
        center:true,
      }).then(()=>{ // 重新登录
        const loading = this.$loading({
          lock:true,
          text:'拼命登录中...',
          spinner:'el-icon-loading',
          background:'rgba(0,0,0,.7)'
        })
        this.$store.dispatch('chat/loginTIM').then(()=>{
          loading.close()
          this.$store.commit('chat/showMessage',{
            message:'登录成功！',
            center:true,
            type:'success'
          })
        })
      }).catch(()=>{ // 退出登录
        removeToken() // 删除token
        resetRouter() // 重置router
        removeUserSign() // 清除tim 签名
        this.$store.commit('chat/RESET_STATE') // 清空聊天缓存的数据
        this.$router.push(`/login?redirect=${this.$route.fullPath}`)
      })
    },
    // 监听会话中被撤回消息
    onMessageRevoked(event){
      console.log(event)
      // 刷新会话列表
      this.$store.dispatch('chat/getConversationListTIM').then(()=>{
        console.log("监听对方撤回一条消息，刷新会话列表")
      })
    },

  }
}
</script>
